package com.dengdai.applibrary.base;

import android.content.Context;
import android.util.Log;

import com.dengdai.applibrary.R;
import com.dengdai.applibrary.network.NetWork;
import com.dengdai.applibrary.task.MyTaskListener;
import com.dengdai.applibrary.task.TaskItem;
import com.dengdai.applibrary.task.TaskListener;
import com.dengdai.applibrary.task.TaskThread;
import com.dengdai.applibrary.utils.ToastUtils;
import com.dengdai.applibrary.view.custom.CustomToast;

import java.util.Map;

/**
 * @说明 异步线程基类
 * @作者 LY
 * @时间 15/12/23 11:10
 * @版权 Copyright(c) 2015 LY-版权所有
 */
public abstract class BaseAction {
    public Map<String, Object> _map;
    protected Context context;
    protected TaskItem taskItem;
    protected TaskThread taskThread;
    protected TaskListener taskListener;
    private long startTime = 0;
    private long endTime = 0;

    public BaseAction(Context context) {
        this.context = context;
    }

    /**
     * 调用此方法开始异步任务
     */
    public void execute() {
        if (null != _map) {
            Log.v("hanjh _map", _map.toString());
        }
        taskThread = new TaskThread();
        taskItem = new TaskItem();
        startTime = System.currentTimeMillis();
        taskItem.setListener(new MyTaskListener() {
            @Override
            public void pre() {
                super.pre();
                if (null != taskListener) {
                    taskListener.onPreExecute();
                }
            }

            @Override
            public void get() {
                super.get();
                doInbackground();
            }

            @Override
            public void update() {
                super.update();
                if (null != taskListener) {
                    taskListener.onPostExecute();
                }
            }
        });
        if (NetWork.getNetworkStatus(context)) {
            taskThread.execute(taskItem);
        } else {
            CustomToast.showIconToast(R.mipmap.icon_net_work_error, "网络连接失败，请重试");
        }
    }

    /**
     * 调用此方法更新界面 主要调用 TaskListener.onPostExecute()回调到界面
     *
     * @param item
     */
    public void update(Object item) {
        endTime = System.currentTimeMillis();
        if (endTime - startTime >= 1000) {
            taskThread.update(item);
        } else {
            try {
                Thread.sleep(1000 - (endTime - startTime));
            } catch (Exception e) {
            }
            taskThread.update(item);
        }
    }

    /**
     * 获取传递的数据
     *
     * @return
     */
    public Object getData() {
        if(null!=taskItem.getResult()){
            Log.v("hanjh getResult",taskItem.getResult().toString());
        }
        return taskItem.getResult();
    }

    /**
     * 异步操作，主要的异步请求实现方法
     */
    protected abstract void doInbackground();

    /**
     * 设置任务监听
     *
     * @param taskListener
     */
    public void setTaskListener(TaskListener taskListener) {
        this.taskListener = taskListener;
    }

}
